package org.dx.oho.book.one.interceptor;

import java.lang.reflect.Method;

/**
 * 拦截器
 * create by duanx 2021/5/24
 * @author admin*/
public interface Interceptor {

    /**
     * 调用真实对象之前的方法
     * @param proxy 代理对象
     * @param target 要代理的目标
     * @param method 代理方法
     * @param args 方法参数
     * @return 返回true进行下真实对象调用否则调用around
     */
    boolean before(Object proxy,Object target, Method method, Object[] args);

    /**
     * 环绕真实对象的方法
     * @param proxy 代理对象
     * @param target 要代理的目标
     * @param method 代理方法
     * @param args 方法参数
     */
    void around(Object proxy,Object target, Method method, Object[] args);

    /**
     * 真实对象之后的方法
     * @param proxy 代理对象
     * @param target 要代理的目标
     * @param method 代理方法
     * @param args 方法参数
     */
    void after(Object proxy,Object target, Method method, Object[] args);


}
